/**
 * @Project : algorithm-learning
 * @Author : Ruoyu Wang
 * @User : Momenta
 * @DateTime : 2024/3/17 9:54
 */

//岁阳是一种不具固定形体的能量生物。一些不怀好意的岁阳会扰乱正常的社会秩序。
//现在，藿藿被委派捉拿岁阳。藿藿会选择一个点(x1,y1)，以(0,0)为左下角，(x1,y1)为右上角，平行于坐标轴，构成一个矩形陷阱，
//如果岁阳位于这个矩形内部或边界上，就可以成功捉拿岁阳。岁阳的位置被记作(x2,y2)。
//下面，给出坐标(x,y)的构成方法:
//给定一个长度为n的整数序列a，和一个长度为m的整数序列b，从a中选择其中一个数字作为x,从b中选择一个数字作为y，这样可以得到一组坐标(x,y)。
//藿藿所选择的(x1,y1)和岁阳的位置(x2,yっ)均通过上述办法产生。
//你的任务是计算在所有可能的情形中，藿能够成功捉拿岁阳的情形数量
//
//输入描述
//  第一行两个整数n和m，分别表示数组a和b的长度，
//  第二行n个整数a1,a2,...an, 表示序列a。
//  第三行m个整数b1,b2,...bm, 表示序列b。
//  对于全部数据，1≤ n,m ≤5x10^4, 1<= ai,bi ≤10^9
//输出描述
//  输出一行，一个整数，表示答案。
//
//示例1
//输入
//3 3
//1 2 3
//1 1 3
//输出
//42
//说明
//  当藿藿选择的位置是(1，1)，岁阳选择的位置是(1，3)时，藿藿无法成功捉拿岁阳。
//  当藿藿选择的位置是(2，3)，岁阳选择的位置是(2，1)时，藿藿可以成功捉拿岁阳。
//  类似的情况共有 42 种，因此输出 42。

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int m, n;
    scanf("%d %d", &m, &n);
    int a[m];
    int b[n];
    for (int i = 0; i < m; ++i) {
        scanf("%d", &a[i]);
    }
    for (int i = 0; i < n; ++i) {
        scanf("%d", &b[i]);
    }

    sort(a, a + m);
    sort(b, b + n);

    long long resa = 0;
    for (int i = 0; i < n;) {
        int x = a[i];
        int l = 0, r = m - 1;
        while (l < r) {
            int mid = (l + r) >> 1;
            if (a[mid] >= x) r = mid;
            else l = mid + 1;
        }
        int tmp = l;
        l = 0, r = m - 1;
        while (l < r) {
            int mid = (l + r + 1) >> 1;
            if (a[mid] <= x) l = mid;
            else r = mid - 1;
        }
        resa += (long long) (l - tmp + 1) * (l + 1);
        i = l + 1;
    }
    long long resb = 0;
    for (int i = 0; i < n;) {
        int x = b[i];
        int l = 0, r = m - 1;
        while (l < r) {
            int mid = (l + r) >> 1;
            if (b[mid] >= x) r = mid;
            else l = mid + 1;
        }
        int tmp = l;
        l = 0, r = m - 1;
        while (l < r) {
            int mid = (l + r + 1) >> 1;
            if (b[mid] <= x) l = mid;
            else r = mid - 1;
        }
        resb += (long long) (l - tmp + 1) * (l + 1);
        i = l + 1;
    }

    printf("%lld", resa * resb);

    return 0;
}
